package com.xxl.job.client;

import com.xxl.job.core.biz.model.ParamInfo;
import com.xxl.job.core.biz.model.TaskInfo;

import java.util.List;

/**
 * 任务操作简单api封装
 *
 * @author huangtao
 * @date 2020/7/3 18:35
 */
public interface TaskClient {

    /**
     * 创建任务（默认使用配置文件参数）
     *
     * @param param 任务参数
     * @return 返回jobId
     */
    int createTask(TaskInfo param);

    /**
     * 创建并启动任务
     *
     * @param params 任务参数
     */
    void createAndStart(List<TaskInfo> params);

    /**
     * 创建并启动任务
     *
     * @param param 任务参数
     */
    int createAndStart(TaskInfo param);

    /**
     * 创建任务
     *
     * @param param 任务参数
     */
    void createTask(List<TaskInfo> param);

    /**
     * 创建任务(指定详细参数)
     *
     * @param param 任务参数
     * @return 返回jobId
     */
    int createTask(ParamInfo param);

    /**
     * 启动组内所有任务
     *
     * @param groupId 组ID
     */
    void startTask(String groupId);

    /**
     * 启动多个任务
     *
     * @param groupId        组ID
     * @param includeHandler 需启动的任务handler
     */
    void startTask(String groupId, List<String> includeHandler);


    /**
     * 启动任务
     *
     * @param groupId        组ID
     * @param excludeHandler 需排除的任务handler
     */
    void startTask(String groupId, String excludeHandler);

    /**
     * 停止并删除任务
     *
     * @param groupId 组ID
     * @param handler 执行handler
     */
    void removeTask(String groupId, String handler);

    /**
     * 删除组内任务
     *
     * @param groupId 组ID
     */
    void removeTask(String groupId);

    /**
     * 更新任务
     *
     * @param info 参数
     */
    void updateTask(TaskInfo info);

    /**
     * 更新任务
     *
     * @param tasks 参数
     */
    void updateTask(List<TaskInfo> tasks);

    /**
     * 停止任务
     *
     * @param groupId 组ID
     * @param handler 执行handler
     */
    void stopTask(String groupId, String handler);

    /**
     * 停止组内所有任务
     *
     * @param groupId 组ID
     */
    void stopTask(String groupId);


}
